package io.github.wangtisnruipopo.carscore.types;

import java.util.List;

/**
 * <h1>出牌记录</h1>
 * <p>记录玩家出了哪些牌，出牌的类型是什么</p>
 *
 * @param <T> 出牌类型
 */
public interface IPlayCardsRecord<
        D extends AbsDecorValue,
        V extends AbsCardValue,
        T extends IPlayCardsType<C>,
        C extends ISimpleCard<D, V>,
        P extends IPlayer<D, V, C>
        > extends Comparable<IPlayCardsRecord<D, V, ? extends IPlayCardsType<C>, C, ? extends IPlayer<D, V, C>>> {
    /**
     * <h2>获取出的牌</h2>
     *
     * @return 出牌集合
     */
    List<C> getCards();

    /**
     * <h2>获取出牌者</h2>
     * @return 出牌者对象
     */
    P getPlayer();

    /**
     * <h2>获取本次出牌目标玩家</h2>
     * @return 出牌目标玩家对象
     */
    P getTargetPlayer();

    /**
     * <h2>获取出牌类型</h2>
     *
     * @return 出牌类型
     */
    T getType();

    /**
     * <h2>是否跳过当前出牌</h2>
     * @return 是返回true，否返回false
     */
    boolean isSkip();
}
